var Util = function() {
	this.resultMsg = null;
	
	this._preload();

};
// var _ROOT = "http://192.168.0.82";
var _ROOT = "http://www.golfinsns.com";
var _UPLOADPATH_TMP = "/data/msp300/dl/files/free/tmp";
var _UPLOADPATH = "/data/msp300/dl/files/free/uploaded";
var _UPLOADURL_TMP = _ROOT + "/tmp";
var _UPLOADURL = _ROOT + "/uploaded";
Util.prototype = {
    constructor : Util
    // 페이지 전달 인자 파싱
    , getParam: function(key){
        var ret = (this.getObjParam())[key];
        if(!ret) ret = "";
        
        return ret;
    }
    , getObjParam: function(){
        var _parammap = {};
        document.location.search.replace(/\??(?:([^=]+)=([^&]*)&?)/g, function () {
            function decode(s) {
                return decodeURIComponent(s.split("+").join(" "));
            }
    
            _parammap[decode(arguments[1])] = decode(arguments[2]);
        });
        
        return _parammap;
    }
    /**
     * 다음과 같은 형식으로 Check Button 이 설정되어 있을 경우 수동으로 체크 표시 이벤트를 걸어주는 함수
     * <input></input>
     * <label></label>
     * @param $target : Check Button을 감싸고 있는 div 테그 셀렉터
     */
    , setCheckButton : function($target) {
        var checkItem = $target;
        
        checkItem.find("input:checkbox").bind('change', function() {
            if ($(this).prop('checked')) {
                $(this).attr('checked', true);
                $(this).parent().find('label').removeClass('ui-checkbox-off');
                $(this).parent().find('label').addClass('ui-checkbox-on');
                $(this).parent().find('span.ui-icon').removeClass('ui-icon-checkbox-off');
                $(this).parent().find('span.ui-icon').addClass('ui-icon-checkbox-on');
            } else {
                $(this).attr('checked', false);
                $(this).parent().find('label').removeClass('ui-checkbox-on');
                $(this).parent().find('label').addClass('ui-checkbox-off');
                $(this).parent().find('span.ui-icon').removeClass('ui-icon-checkbox-on');
                $(this).parent().find('span.ui-icon').addClass('ui-icon-checkbox-off');
            }
        });
        
    }
    /**
     * 숫자를 00 스타일로 바꾸어 주는 함수
     */
    , getZeroNumString : function($num) {
        if ($num < 10) {
            return "0" + $num;
        } else {
            return "" + $num;
        }
    }
    /**
     * YYYYMMDD 의 형식을 YYYY년 MM월 DD일 (요일) 로 바꾸어주는 함수
     */
    , getDateYYMMNN : function($date) {
        var temp = String($date);
        var week = new Array('일', '월', '화', '수', '목', '금', '토');
        var date = new Date(temp.substr(0, temp.length - 4), temp.substr(temp.length - 4, 2), temp.substr(temp.length - 2, 2));
        return "" + date.getFullYear() + "년 " + this.getZeroNumString(date.getMonth()) + "월 " + this.getZeroNumString(date.getDate()) + "일 (" + week[date.getDay()] + ")";
    }
    /**
     * 숫자에 3자리씩 , 삽입하여 반환하는 함수
     */
    , getMoneyTypeNum : function($num) {
        var str = String($num);
        var result = "";
        //세자리 이상일떄
        if (str.length > 3) {
            for ( i = str.length - 1, j = 0; i >= 0; i--) {
                result = str.substring(i, i + 1) + result;
                //끝자리 부터 하나씩 합치다가
                j++;

                if (j != 0 && j == 3 && i != 0) {//세자리 되면 콤마 추가
                    result = "," + result;
                    j = 0;
                }
            }
        }
        return result;
    }
    , _preload: function(){
    	var 	thisClass = this;
  		// 서버 메시지맵
		$.ajax({
			url: "../js/src/mypage/result.message"
			, type: "get"
			, dataType: "json"
			, async: false
			, success: function(ret, sta){
				//alert("success!!");
				thisClass.resultMsg = ret;
			}
			, error:function(e){
				//alert("error");
			}	
		});
    }
    //Null 체크
    , nvl: function(val, def){
		if(def !== 0 && !def) def = "";
		
		if(val === 0 || val) return val;
		else return def;
	}
	/*Format 년/월/일 형태
	*ex) _util.fDateYmd("19801231") = 1980.12.31
	*ex) _util.fDateYmd("19801231","-") = 1980-12-31
	*/
	, fDateYmd:function(n,v){	
		if(v !== 0 && !v) v = ".";		
		if(n=="") return n;
		n = String(n);
		
		return n.substr(0,4) +v+ n.substr(4,2) +v+ n.substr(6,2);
	}
	/*Format 월/일 형태
	*ex) _util.fDateMd("19801231") = 12.31
	*ex) _util.fDateMd("19801231","-") = 12-31
	*/
	, fDateMd:function(n,v){			
		if(v !== 0 && !v) v = ".";
		if(n=="") return n;
		n = String(n);
		
		return n.substr(4,2) +v+ n.substr(6,2);
	}
	/*Format 시/분 형태
	*ex) _util.fTime("125959") = 12:59
	*ex) _util.fDateMd("19801231","-") = 12-59
	*/
	, fTime:function(n,v){		
		if(v !== 0 && !v) v = ".";
		if(n=="") return n;
		n = String(n);			
		return n.substr(0,2) +v+ n.substr(2,2);
	}
	/*Format 숫자 형태
	*ex) _util.fNum("1000000") = 1,000,000
	*/
	, fNum:function(n){
		if(n=="") return n;
		n = String(n);			
		i = n.length;
		r = "";
		while(true){				
			if(i<=3) {
				r = n.substr(0,i) + r;					
				break;
			}
			r = ","+ n.substr(i-3,3) + r;				
			i-=3;
		}
		return r;
	}
	// 반올림
	, roundEx: function(val, p){
		p = p || 0;

		if(p >= 0){
			var n = Math.pow(10, p);
			return Math.round(val/n)*n;
			//return parseInt(n*val+0.5)/n;
		}else{
			var m = Math.pow(10, Math.abs(p));
			return Math.round(val*m)/m;
			//return parseInt((val + m/2)/m)*m;
		}
	}
	//로그인여부 ( null / loginData )
	, isLogin: function(){				
		if(!_gf.LOGIN_DATA){
			return null;	
		}else if(!_gf.LOGIN_DATA["isLogin"]){
			//alert("로그인 후 사용하시기 바랍니다.");
			return null;
		}else {
			return _gf.LOGIN_DATA;
		}
	}
	//닉네임 조회 ( null / 오브젝트 / def 정보 )
	, getLogin:function(def){		
		var map = {"로그인":"isLogin"
				          ,"리턴주소":"loginAfterUrl"
				          ,"아이디":"userId"
				          ,"닉네임":"nickname"
				          ,"이름":"userName"};				        
		var login = this.isLogin();
		if(!login) {
			return null;
		}else {
			if(def !== 0 && !def) {				
				return login;
			}else {
				return login[map[def]];		
			}
		}
		
		return null;
	}
	//텍스트표시
	, ajaxLog: function(str){		
		if($("textarea#tmp").length) $("textarea#tmp").remove();
		
		$("section:last").append("<textarea id='tmp' stype='width:200px; height=200px;'/>").find("textarea#tmp");		
      $("textarea#tmp").val(str);      
	}	
	//파일경로
	, filePath2Url: function(uri){
			if(!uri) return "";
			
			if(uri.indexOf("/tmp/") == -1){
				var szPath = _UPLOADPATH;
				var szUrl = _UPLOADURL;
			}else{
				var szPath = _UPLOADPATH_TMP;
				var szUrl = _UPLOADURL_TMP;
			}
			
			return uri.replace(szPath, szUrl);
	}
	// 이메일 리스트
	, getEmailList: function(){
		var arr = [
			{
				"이메일": ""
				, "텍스트": "직접입력"
			}
			, {
				"이메일": "naver.com"
				, "텍스트": "네이버"
			}
			, {
				"이메일": "daum.net"
				, "텍스트": "다음"
			}
			, {
				"이메일": "hanmail.net"
				, "텍스트": "한메일"
			}
			, {
				"이메일": "nate.com"
				, "텍스트": "네이트"
			}
			, {
				"이메일": "yahoo.com"
				, "텍스트": "야후"
			}
			, {
				"이메일": "gmail.com"
				, "텍스트": "지메일"
			}
			, {
				"이메일": "hotmail.com"
				, "텍스트": "핫메일"
			}
			, {
				"이메일": "chol.com"
				, "텍스트": "천리안"
			}
			, {
				"이메일": "dreamwiz.com"
				, "텍스트": "드림위즈"
			}
			, {
				"이메일": "lycos.co.kr"
				, "텍스트": "라이코스"
			}
			, {
				"이메일": "korea.com"
				, "텍스트": "코리아닷컴"
			}
			, {
				"이메일": "hanmir.com"
				, "텍스트": "한미르"
			}
			, {
				"이메일": "paran.com"
				, "텍스트": "파란"
			}
			, {
				"이메일": "freechal.com"
				, "텍스트": "프리첼"
			}
			, {
				"이메일": "hanafos.com"
				, "텍스트": "하나포스"
			}
		];
		
		return arr;
	}
	//엔터를 br 태그로 교체
	, enter2br: function(val){
		return (val+"").enter2br();
	}
	//네이티브 셀렉트박스
	, makeNativeSelect: function(obj, options, key){
		obj.find("option").remove();
		
		for(var i=0;i<options.length;++i){			
			if(key) obj.append("<option>"+options[i][key]+"</option>");
			else obj.append("<option>"+options[i]+"</option>");
		}
		
		obj.selectmenu("refresh")
	}
	//바이트 조회
	, getByteLen: function(str){
			var ibyte = 0;

		    for (var i = 0; i < str.length; i++) {
		        var tmp = escape(str.charAt(i));
		        if (tmp.length == 1) ibyte++;
		        else if (tmp.indexOf("%u") != -1) ibyte += 2;
		        else if (tmp.indexOf("%") != -1) ibyte += tmp.length/3;
		    }
		
		    return ibyte;
		}
		
	// DCD 결과와 메시지 매핑
	, getResultMsg: function(result, aVar){
		var sid = result["msp"]["params"]["pub"]["sid"];
		var serviceName = result["msp"]["params"]["pub"]["servicename"];
		var resultCode = result["msp"]["contents"]["serviceResult"];
		
		//alert(sid + '-' + serviceName + '-' + resultCode);
		
		if(!this.resultMsg) return null;
		if(!this.resultMsg[sid]) return null;
		if(!this.resultMsg[sid][serviceName]) return null;
		if(!this.resultMsg[sid][serviceName][resultCode]) return null;
		
		var szRet = this.resultMsg[sid][serviceName][resultCode];
		
		if(aVar){
			for(var i=0;i<aVar.length;i++){
				while(szRet.indexOf("{" + i + "}") != -1){
					szRet = szRet.replace("{" + i + "}", aVar[i]);
				}
			}
		}
		return szRet;
	}
	// 기본이미지-동호회 
	, getDefaultClubImage: function(img){
		var defaultImg = _ROOT + "/images/default_100_100.gif";
		if(!img){
			return defaultImg;
		}else if(img.indexOf("tmp") > -1){
			return _ROOT + img;	
		}else {
			return _ROOT + img.replace("..","");	
		}
		
		return img;
	}
	// 기본이미지-일반이미지
	, getDefaultImage: function(img){
		var szPath = "";
		var szUrl = "";
		if(!img) return "../images/default_250_180.gif";
		
		if(img.indexOf("/tmp/") == -1){
			szPath = _UPLOADPATH;
			szUrl = _UPLOADURL;
		}else{
			szPath = _UPLOADPATH_TMP;
			szUrl = _UPLOADURL_TMP;
		}
		
		return img.replace(szPath, szUrl);
	}
	// 기본이미지-프로필
	, getDefaultProfileImage: function(img){
		var szPath = "";
		var szUrl = "";
			
		if(!img) return "../images/noimg_100_100.gif";
		
		if(img.indexOf("/tmp/") == -1){
			szPath = _UPLOADPATH;
			szUrl = _UPLOADURL;
		}else{
			szPath = _UPLOADPATH_TMP;
			szUrl = _UPLOADURL_TMP;
		}
		
		return img.replace(szPath, szUrl);
	}
	// 바이트 단위 문자열 자름
	, leftB: function(val, lenB){
		val = val+"";
		
		var szRet = "";
		var iByte = 0;
		for(var i=0;i<val.length;i++){
			var ch = escape(val.charAt(i));
			szRet += val.charAt(i);
			
			if(ch.length == 1){
				iByte++;
			}else if(ch.indexOf("%u") != -1){
				iByte+=2;
			}else if(ch.indexOf("%") != -1){
				iByte+= ch.length/3;
			}
			
			if(iByte >= lenB) break;
		}
		
		if(i < val.length) szRet += "...";
		
		return szRet;
	}
	// 오브젝트 복사
	, objectCopy: function(src){
		var constructor = null;
		var dst = null;
		
		if(src && src.constructor){
			var match = src.constructor.toString().match(/function ([^\(]*)/);
		
			constructor = (match && match[1]) || null;
		}
		
		if(typeof src == "object" && constructor){
			dst = eval("new " + constructor + "()");
			if(src.prototype){
				for(var key in src.prototype){
					dst.prototype[key] = this.objectCopy(src.prototype[key]);
				}
			}
			
			for(var key in src){
				dst[key] = this.objectCopy(src[key]);
			}
			
			return dst;
		}
		
		dst = src;
		
		return dst;
	}
	//지역정보
	, getLocale: function(k){
		var map = [{
				"코드": 1
				, "코드명": "수도권(서울/경기/인천)"
			}
			, {
				"코드": 2
				, "코드명": "중부권(강원/충청)"
			}
			, {
				"코드": 3
				, "코드명": "남부권(제주)"
			}]
				
		return map[k]["코드명"];
	}
	
	, executeThread: function(bFunction, callback, arg){
	   var tf = arguments.callee;
	   
	   if(!arg) arg = {};
	   if(!arg["cnt"]) arg["cnt"] = 0;
	   if(!arg["timeout"]) arg["timeout"] = 10000;
		
	   
	   arg["cnt"]++;
	   
	   if(bFunction()){
	    callback(arg);
	    return;
	   }else{
	    if(arg["cnt"]*100 > arg["timeout"]){
	     if(!arg["onTimeout"]) arg["onTimeout"] = function(){};
	     
	     arg["onTimeout"](arg);
	     return;
	    }
	    
	    setTimeout(function(){
	     tf(bFunction, callback, arg);
	    }, 100);
	   }
	}
	// 페이스북 관련
	, getShortUrl: function(q_url, ret){
            gapi.client.load('urlshortener', 'v1', function(){
                var request = gapi.client.urlshortener.url.insert({
                    'resource': {
                        'longUrl': q_url
                    }
                });
                
                request.execute(function(r) {
                    ret["결과값"] = r["id"];
                });
            });
        }
        , facebook_sharer: function(t, d, b, r){
            d = d || "";
            d = this.leftB(d, 80);
            
            t = encodeURIComponent(t);
            d = encodeURIComponent(d);
            b = encodeURIComponent(b);
            r = encodeURIComponent(r);
            
            var szLink = "http://www.golfinsns.com/facebook_sharer?t=" + t + "&d=" + d + "&b=" + b + "&r=" + r
            
            var ret = {};
            this.getShortUrl(szLink, ret);
            
            this.executeThread(function(){
                return ret["결과값"];
            }, function(){
                var url = "http://www.facebook.com/sharer.php?u=" + ret["결과값"];
                window.plugins.childBrowser.showWebPage(url, {
                    showLocationBar : false
                });
                // window.open("http://www.facebook.com/sharer.php?u=" + ret["결과값"]);
            });
        }
};


	
//substr 메소드의 옵션에 마이너스 값설정이 가능하도록 설정
if(!String.substrEx){
	String.prototype.substrEx = function(){
		var szRet = "";
		
		if(arguments.length == 1){
			szRet = this.substr(arguments[0]);
			
			if(parseInt(arguments[0]) < 0 && szRet.length != Math.abs(arguments[0])){
				szRet = this.substr(this.length +  arguments[0]);
			}
		}else{
			szRet = this.substr(arguments[0], arguments[1]);
		}
		
		return szRet;
	}
}
//엔터값을 br 태그값으로 변경
if(!String.enter2br){
	String.prototype.enter2br = function(){
		return this.replace(/\n/g, "<br>");
	}
}

function executeThread(bFunction, callback, arg){
   var tf = arguments.callee;
   
   if(!arg) arg = {};
   if(!arg["cnt"]) arg["cnt"] = 0;
   if(!arg["timeout"]) arg["timeout"] = 10000;
	
   
   arg["cnt"]++;
   
   if(bFunction()){
    callback(arg);
    return;
   }else{
    if(arg["cnt"]*100 > arg["timeout"]){
     if(!arg["onTimeout"]) arg["onTimeout"] = function(){};
     
     arg["onTimeout"](arg);
     return;
    }
    
    setTimeout(function(){
     tf(bFunction, callback, arg);
    }, 100);
   }
}

document.util = new Util();    

var _gf;
var _util;

executeThread(function(){
	return document.globalObj;
}, function(){
	_gf = document.globalObj;
});

executeThread(function(){
	return document.util;
}, function(){
	_util = document.util;
});


//this.objScoreRecordCard.$getBtnScoreCard().jqmData("ajax", false).attr("rel", "external").attr("href", "my_card_record.html");

    

